//
//  FHStatus.swift
//  FHweibo
//
//  Created by 张嵩雷 on 16/4/13.
//  Copyright © 2016年 feng. All rights reserved.
//

import UIKit

class FHStatus: NSObject {
    
    ///微博创建时间
    var created_at: String?
    
    ///微博ID
    var id: Int64 = 0
    
    ///微博内容
    var text: String?
    
    ///微博来源
    var source: String?
    
    /// 微博的配图 [Int], [String: AnyObject], [[String: AnyObject]]
    ///数组,里面保存的是字典
    var pic_urls:[[String: AnyObject]]?
    
    ///用户模型,服务器返回的是字典,需要我们自己来转模型
    var user: FHUser?
    
    ///字典转模型
    init(dict: [String: AnyObject]) {
        super.init()
        
        // 获取字典中的所有key,来模型中找属性,找到属性后,将字典中的value赋值给模型中的对应的属性
        //["id": 10, "text": "哈哈", "source": "来源", "aa": "不知道"]
//        FHPrint("开始kvc赋值")
        setValuesForKeysWithDictionary(dict)
    }
    
    // setValuesForKeysWithDictionary最终会调用这个方法,字典中有多少个key,就会调用多少次setValue:forKey:
    // value: 字典中的value, key: 字典中的key
    override func setValue(value: AnyObject?, forKey key: String) {
        
//        FHPrint("forKey: \(key), value: \(value)")
        //拦截user这个key,不要系统来kvc,我们自己来赋值
        if  key == "user" {
            print("user: \(value)")
            //再判断value 是不是字典
            if let dict = value as? [String: AnyObject] {
                //字典转模型,并且赋值给user属性
                user = FHUser(dict: dict)
            }
             // 一定要返回,如果不返回,又会调用 super.setValue(value, forKey: key),又会将value（字典）赋值给user
            return
        }
        
        super.setValue(value, forKey: key)
    }
    
    
    ///在字典中的key在模型中找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    ///对象的打印
    override var description: String {
        get {
            let keys = ["created_at","id","text","source","pic_urls","user"]
            
            //通过key在模型中找属性的值,找到属性的值,将key和值,拼接到字典里面
            
            return "\n \t微博模型: \(self.dictionaryWithValuesForKeys(keys).description)"
        }
    }
    
}
